﻿/******************************************************************************
* File description: animationState_Shifting.h
* Function: 放靶和转靶动画State，用于记录当前动画的状态，并（只记录目标位置，中间过渡位置由Controller计算）
* Current Version: 1.0.0
* Author: JNN
* Date: 2025-07-01
*  -----
*  Copyright by 博坤生物 .
 *****************************************************************************/

#ifndef ANIMATIONSTATE_SHIFTING_H
#define ANIMATIONSTATE_SHIFTING_H

#include <QObject>
#include <QQueue>

// 放靶 / 转靶
class AnimationState_Shifting : public QObject
{
    Q_OBJECT
public:
    AnimationState_Shifting();


public:

    void    reset();

    void    setClampState(int state);
    void    setBaffleState(int state);
    void    openCap();          // 开盖
    void    closeCap();         // 关盖
    void    takeTarget();       // 取靶
    void    placeTarget();      // 放靶
    void    moveToRadio();      // 跑到活检那，不知道要做什么操作
    void    resetBar();
    void    setPPumpState(int state);    // 这是那个蠕动泵
    void    setBlowTargetState(int state);
    void    setCapCraneState(int state);
    void    setTargetCraneState(int state);
    void    setRadioBarState(int state);        // 活检上下状态（这个不进操作队列）

    // 拆分出来惹
    void    step_move2origin();      // 移动到原点
    void    step_move2cap();         // 开盖移动到开盖位置
    void    step_move2target1();     // 吸盘移动到靶材罐位置
    void    step_move2target2();     // 吸盘移动到溶靶瓶位置
    void    step_move2radio();       // 吸盘移动到活检位置
    void    step_capDown();          // 开盖往下动
    void    step_capUp();            // 开盖往上动
    void    step_openCapClamp();     // 开盖夹爪松开
    void    step_closeCapClamp();    // 开盖夹爪夹紧
    void    step_openCap();          // 开盖动作（旋转）
    void    step_closeCap();         // 关盖动作（旋转）
    void    step_takeTarget();       // 取靶动作
    void    step_placeTarget();      // 放靶动作
    void    step_upTarget();         // 取放靶-上去
    void    step_downTarget();       // 取放靶-上去
    void    step_suckRotateLeft();   // 吸盘转到左边(活检)
    void    step_suckRotateRight();  // 吸盘转到右边(靶材罐)

    enum emBarState{
        EMPTY,              // 空
        MOV_ORIGIN,         // 向原点移动
        MOV_CAP,            // 向开盖移动
        MOV_TARGET1,        // 向取靶移动（吸盘->靶材罐）
        MOV_TARGET2,        // 向扔靶移动（吸盘->溶靶瓶）
        MOV_RADIO,          // 向活检运动
        ROTATE_RADIO,       // 向活检旋转（机型2）
        ROTATE_TARGET1,     // 向靶材罐旋转（机型2）
        DOWN_CAP,           // 开盖下移
        UP_CAP,             // 开盖上移
        OPEN_CAP_CLAMP,     // 开盖夹爪松开
        CLOSE_CAP_CLAMP,    // 开盖夹爪夹紧
        DOWN_TARGET,        // 吸盘下移
        UP_TARGET,          // 吸盘上移
        ROT_CAP_0_CLOSE,    // 顺时针转盖
        ROT_CAP_1_OPEN,     // 逆时针转盖
    };

    // 开盖/吸盘的执行队列
    QQueue<emBarState> _barOperation;       // 我真机智(bushi

    int             _clampPosi = 0;         // 夹爪  1加紧 0松开
    int             _bafflePosi = 0;        // 挡板  0挡 1不挡
    int             _peristalticPump = 0;   // -1抽液 0不动 1打液
    int             _blowTargetState = 0;   // 吹气 -1故障 0不动 1吹气
    int             _radioBarPosi = 0;     // 活检位置 0在上面 1在下面


    int             _pipeNum = 4;           // 管子上面的灯
    QVector<int>    _pipeLight;

    int             _capCraneState = 0;     // 开盖器状态 -1故障 0正常 （这里的状态只有-1和0，Controller的状态只有0和1
    int             _targetCraneState = 0;  // 取靶器状态 -1故障 0正常

    int             _machineType = 2;       // 机型





};

#endif // ANIMATIONSTATE_SHIFTING_H
